home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 1 (Walnut Creek)
/
Aminet - June 1993 [Walnut Creek].iso
/
aminet
/
misc
/
amag
/
9303b.lha
/
ARexx & Assembler
/
Listing3.asm
< prev
next >
Wrap
Assembly Source File
|
1993-02-25
|
3KB
|
130 lines
* Programm: ARexx-Testport
* Autoren: Alexander Kochann und Oliver Reiff
* Assembler: DevPac II
* Demo für einen eigenen ARexx-Port
* Der Port wird nach A5 geschrieben
LN_NAME equ 10
rm_ARG0 equ 40
CreateMsgPort equ -666
DeleteMsgPort equ -672
AddPort equ -354
RemPort equ -360
GetMsg equ -372
ReplyMsg equ -378
WaitPort equ -384
move.l 4.w,a6
jsr CreateMsgPort(a6)
tst.l d0
* Fehler
beq Exit
move.l d0,a5
lea PortName,a0
* Name eintragen
move.l a0,LN_NAME(a5)
move.l a5,a1
jsr AddPort(a6)
Loop
move.l a5,a0
jsr WaitPort(a6)
move.l a5,a0
jsr GetMsg(a6)
tst.l d0
beq.s Loop
move.l d0,a2
move.l rm_ARG0(a2),a0
lea Ende_Text,a1
bsr CompareStrings
beq.s REXX_ENDE
lea Flackern_Text,a1
bsr CompareStrings
bgt.s REXX_Flackern
Reply
move.l a2,a1
jsr ReplyMsg(a6)
bra.s Loop
*---------------------------------
REXX_ENDE
move.l a2,a1
jsr ReplyMsg(a6)
Ende
move.l 4.w,a6
move.l a5,a1
jsr RemPort(a6)
move.l a5,a0
jsr DeleteMsgPort(a6)
Exit
moveq #0,d0
rts
*--------------------------------
REXX_Flackern
.loop
* nach 1. Argument suchen
cmp.b #' ',(a0)+
bne.s .loop
lea Rot_Text,a1
bsr.s CompareStrings
beq.s .rot
lea Grün_Text,a1
bsr.s CompareStrings
beq.s .grün
lea Blau_Text,a1
bsr.s CompareStrings
beq.s .blau
bra.s .ende
.rot
move.w #$f00,d0
bra.s .flackern
.grün
move.w #$0f0,d0
bra.s .flackern
.blau
move.w #$00f,d0
.flackern
move.l #$20000,d7
.f_loop
* FarbCode ins Hardwareregister
move.w d0,($dff180).l
subq.l #1,d7
bne.s .f_loop
.ende
bra.s Reply
*--------------------------------
CompareStrings
* Rückgabewerte:
* D0 = 0, Strings identisch, kein weiterer
* = 1, Strings identisch, danach SPACE
* = -1, Strings verschieden
movem.l a0/a1,-(sp)
.loop
cmp.b (a0)+,(a1)+
bne.s .space
tst.b -1(a1)
bne.s .loop
tst.b -1(a0)
bne.s .space
.richtig
moveq #0,d0
bra.s .ende
.space
cmp.b #' ',-1(a0)
bne.s .falsch
moveq #1,d0
bra.s .ende
.falsch
moveq #-1,d0
.ende
movem.l (sp)+,a0/a1
rts
*--------------------------------
Ende_Text dc.b 'CLOSETESTPORT',0
Flackern_Text dc.b 'FLACKERN',0
Rot_Text dc.b 'ROT',0
Grün_Text dc.b 'GRÜN',0
Blau_Text dc.b 'BLAU',0
PortName dc.b 'TEST_REXX',0
END